// 迭代器结构
Array.prototype[Symbol.iterator] = function () {
	// 1 返回一个对象
	// 2 对象有next方法
	// 3 next方法返回 {value:'每次迭代的值',done:'是否完成'} 结构
	let index = 0
	let self = this
	return {
		next: () => {
			let res = {
				value: self[index],
				done: index >= self.length,
			}
			index++
			return res
		},
	}
}

// 迭代器
Object.prototype[Symbol.iterator] = function () {
	return Object.values(this)[Symbol.iterator]()
}
// 迭代器和生成器
Object.prototype[Symbol.iterator] = function* () {
	yield* Object.values(this)
}

// 案列，要求不报错，并返回值
let [a, b] = {
	a: 1,
	b: 2,
}
console.log(a, b) // 1 2

const obj = {
	store: [1, 2, 3, 4, 5],
	[Symbol.iterator]: function () {
		let index = 0
		const self = this
		return {
			next: function () {
				let res = {
					value: self.store[index],
					done: index >= self.store.length,
				}
				index++
				return res
			},
		}
	},
}
for (const item of obj) {
	console.log(item) // 1, 2, 3, 4, 5
}
